package com.utility.util;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public final class DateUtils {


    /**
     * 时间格式
     */
    public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

    /**
     * 时间格式  yyyy-MM-dd
     */
    public static final String YYYY_MM_DD = "yyyy-MM-dd";

    /**
     * 时间格式  HH:mm:ss
     */
    public static final String HH_MM_SS = "HH:mm:ss";

    private static DateTimeFormatter YYYY_MM_DD_HH_MM_SS_FORMAT = DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS);
    private static DateTimeFormatter YYYY_MM_DD_FORMAT = DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD);
    private static DateTimeFormatter HH_MM_SS_FORMAT = DateTimeFormatter.ofPattern(DateUtils.HH_MM_SS);

    /**
     * 获取当前时间 年-月-日 时:分:秒
     */
    public static String getDateTime(){
        return YYYY_MM_DD_HH_MM_SS_FORMAT.format(LocalDateTime.now());
    }

    /**
     * 获取当前时间 年-月-日
     */
    public static String getDate(){
        return YYYY_MM_DD_FORMAT.format(LocalDate.now());
    }

    /**
     * 获取当前时间 时:分:秒
     */
    public static String getTime(){
        return HH_MM_SS_FORMAT.format(LocalTime.now());
    }

    /**
     * 将 LocalDateTime 转换成 年-月-日 时:分:秒
     * @param date 需要转换的时间
     * @return
     */
    public static String transitionString(LocalDateTime date){
        return YYYY_MM_DD_HH_MM_SS_FORMAT.format(date);
    }

    /**
     * 将 LocalDate 转换成 年-月-日
     * @param date 需要转换的时间
     * @return
     */
    public static String transitionString(LocalDate date){
        return YYYY_MM_DD_FORMAT.format(date);
    }

    /**
     * 将 LocalDateTime 转换成 时:分:秒
     * @param date 需要转换的时间
     * @return
     */
    public static String transitionString(LocalTime date){
        return HH_MM_SS_FORMAT.format(date);
    }

    /**
     * 获取当前时间 年-月-日 时:分:秒
     * @return
     */
    public static Date transitionDate(){
        return Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 根据传入的时间 转换为 Date
     * @param date 被转换的时间
     * @return
     */
    public static Date transitionDate(LocalDateTime date){
        return Date.from(date.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 根据传入的时间 转换为 LocalDateTime
     * @param date 被转换的时间
     * @return
     */
    public static LocalDateTime transitionLocalDateTime(String date){
        return LocalDateTime.parse(date, YYYY_MM_DD_HH_MM_SS_FORMAT);
    }

}
